﻿#include "ProtocolMgr.h"
#include "../protocol/ProtoTd.h"
#include "../protocol/ProtoJson.h"
#include "../protocol/ProtoBin.h"
#include "../protocol/ProtoText.h"

ProtocolMgr* ProtocolMgr::instance()
{
	static ProtocolMgr mgr;
	return &mgr;
}

ProtocolMgr::ProtocolMgr(void)
{

}

NetMsg* ProtocolMgr::pack_protocol(lua_State* lua, i32 index, u16 msg_type)
{
	switch (msg_type)
	{
	case MSG_TYPE_TD:
		return ProtoTd::pack_protocol(lua, index); 
	case MSG_TYPE_JSON:
		return ProtoJson::pack_protocol(lua, index);
	case MSG_TYPE_BIN:
		return ProtoBin::pack_protocol(lua, index);
	case MSG_TYPE_TEXT:
		return ProtoText::pack_protocol(lua, index);
	default:
		break;
	}
	return nullptr;
}

i32 ProtocolMgr::unpack_protocol(lua_State* lua, NetMsg* msg)
{
	if (!msg) {
		return 0;
	}
	switch (msg->msg_type)
	{
	case MSG_TYPE_TD:
		return ProtoTd::unpack_protocol(lua, msg);
	case MSG_TYPE_JSON:
		return ProtoJson::unpack_protocol(lua, msg);
	case MSG_TYPE_BIN:
		return ProtoBin::unpack_protocol(lua, msg);
	case MSG_TYPE_TEXT:
		return ProtoText::unpack_protocol(lua, msg);
	default:
		break;
	}

}

